#!/usr/bin/python3
# -*- coding:UTF-8 -*-

#作品名称：冰枫蓝叶聊天女仆 - 前端
#作者：冰枫火灵X
#许可证：GNU LGPL v3 or later

import time
import os
import shutil
import sys
import libmaid
import libmaidtimer
import libMinigames
import RockPaperScissor
import keynum

cfg={}
namex=''
mn=''
#首次运行，没有maidcfg这个存放配置文件的文件夹，小女仆将会自动创建。
if not os.access('./maidcfg',os.F_OK):
    os.mkdir('./maidcfg')
else:pass
def write_config():
    with open("./maidcfg/maid.conf","w",encoding="UTF-16") as confx:
        for c in cfg.keys():
            confx.write(str(c)+"::"+str(cfg[c])+"\n")
        confx.flush()
        confx.close()
def read_config():
    #尝试读取配置文件里的信息
    r_cfg=open('./maidcfg/maid.conf','r',encoding="UTF-16")
    for r in r_cfg.readlines():
       if r=="\n" or len(r.split("::"))!=2:
           continue
       #尝试将配置文件里面的信息导入cfg字典
       cfg_content=r.split("::")
       cfg_name=cfg_content[0]
       cfg_value=cfg_content[1].strip()
       cfg[cfg_name]=cfg_value
    #逐个确认配置是否读入到cfg字典，如果没有将提示输入。
    if not 'namex' in cfg.keys():
        namex_input=input("""
嘿，小主人，请输入您的昵称：
hey, master, please input your nickname:
""")
        cfg['namex']=namex_input
    if not 'mn' in cfg.keys():
        mn_input=input("""
请为可爱的莪起一个名字：
please give lovely me a name:
""")
        cfg['mn']=mn_input
    #将变量按照cfg字典进行设置
    global namex
    global mn
    namex=cfg['namex']
    mn=cfg['mn']
if not os.access("./maidcfg/maid.conf",os.F_OK):
    with open("./maidcfg/maid.conf",'w',encoding="UTF-16") as c:
        c.write("")
        c.flush()
        c.close()   
read_config()
write_config()
#如果有女仆名字的配置，将会读取已有的
#先在聊天记录里面添加一串横线，首次运行没有这个文件将会自动创建。
sav=open('./maidcfg/chat-text.txt', 'a+', encoding='UTF-16')
sav.write(str('\n===='))
sav.flush()
print("\n欢迎您，"+namex+"！"+"请尽情和我聊天、和我玩吧！")
print("\nWelcome, "+namex+"!"+"Please chat with me and play with me!\n")
t = libmaidtimer.fulltt()
print("时间(Time)："+t)
print("版本(Version)：v4.2\n")

#进入循环
while True:
    us=str(input(namex+'：'))
    #====================================指令
    if us == '/game':
        sav.write('\n'+libmaidtimer.fulltt()+'\n启动井字游戏.')
        a = libMinigames.ticTacToe()
        a.startGame()
        continue
    if us == '/rps':
        sav.write('\n'+libmaidtimer.fulltt()+'\n启动石头剪刀布游戏.')
        b = RockPaperScissor.startgame()
        continue
    if us == '/q':
        print('再见（Goodbye），'+namex+'！'+'\n欢迎下次再来找我聊天哦！'
        +"\n（Welcome to chat with me next time!）")
        sav.write(str('\n'+libmaidtimer.fulltt())+"\n退出程序（Exit）.")
        sav.flush()
        sav.close()
        time.sleep(3)
        break
    if us == '/path':
        print("当前运行路径（Current running path）：\n"+os.path.abspath('./'))
        continue
    if us == '/clear':
        clean_tx = str(input('''
请问您要清除您和小女仆的聊天记录吗？
Would you like to clear your chat with the little maid?
        <y/n>：'''))
        if clean_tx=='y':
            sav.flush()
            sav.close()
            os.remove('./maidcfg/chat-text.txt')
            os._exit(0)
        elif clean_tx=='n':
            continue
        else:
            print("未回答.")
            continue
    if us == '/clearConf':
        confirm_clearConf = str(input("是否清除配置文件？\n(Clear profile?)\n<y/n>"))
        if confirm_clearConf == "y":
            sav.flush()
            sav.close()
            os.remove("./maidcfg/maid.conf")
            os._exit(0)
        elif confirm_clearConf == 'n':continue
        else:
            print("未回答.")
            continue
    #统计聊天记录
    if us == '/view':
        viewo = open('./maidcfg/chat-text.txt', 'r+', encoding='UTF-16')
        view = viewo.readlines()
        viewo.close()
        print(mn+'：')
        for view_kan in view:
            print('||'+view_kan.strip('\n'))
        print('一共有'+str(len(view))+'行聊天记录。')
        sav.write(str('\n'+libmaidtimer.fulltt())+"\n查看聊天记录.")
        sav.flush()
        continue
    if us == '/rn_master':
        new_namex=str(input("请输入您的新昵称：\nPlease input your new nickname:\n"))
        cfg['namex']=new_namex
        write_config()
        namex=new_namex
        continue
    if us == '/rn_maid':
        new_mn=str(input("请输入小女仆的新名字：\nPlease input little maid's new name:\n"))
        cfg['mn']=new_mn
        write_config()
        mn=new_mn
        continue
    if us == '/keynum':
        infile=str(input("请输入文本文件的路径：\nPlease input text file's path:\n"))
        incode=str(input("请输入文本文件的编码方式：\nPlease input text file's encoding method:\n"))
        intext=str(input("请输入您要查找的字词：\nPlease input the word you want to find:\n"))
        kn=open(infile,"r",encoding=incode)
        num=keynum.keynum(kn.read(),intext)
        print("嘿，{namex}小主人！字符串「{intx:s}」在文件「{inf:s}」中的数量为{n:d}！".format(intx=intext,inf=infile,n=num,namex=namex))
        print("Hey,master!,The number of string「{intx:s}」in the「{inf:s}」file is{n:d}!".format(intx=intext,inf=infile,n=num))
        continue
    if us == '/clean_error':
        de = bool(input('''
请输入任意文字，按Enter来确认删除报错记录，否则此处请留空并直接按Enter：\n
Please input any string(or character) and press Enter to confirm to delete the error log,
if you don't want, please blank it and press Enter.
'''))
        if de:
            if os.access('./maidcfg/error.txt',os.F_OK):
                os.remove('./maidcfg/error.txt')
                continue
            else:
                print("文件 error.txt 不存在！")
                print("The file error.txt does not exist!")
                continue
        else:
            continue
    if us == '/about':
        print('''
=============================================================================================
欢迎使用 冰枫蓝叶聊天女仆！

本程序贡献列表：
    + 程序主要模块编写，图标定制：「作者」冰枫火灵X <bingfengfsx@qq.com>
    + 游戏模块编写：Loveaabb <loveaabbcraft@163.com>
    
简介：
    + 本程序是用于娱乐的聊天机器人，很适合宅男们哦！你可以尽情和她闲聊、倾诉心事、打情骂俏，
    + 尤其是当你寂寞的时候，它的陪聊效果会让你十分愉悦！
    + 欢迎体验后与作者一起交流心得，QQ群：128242181
    + 可以向我们贡献代码或其他资源，条件是许可证必须是自由软件（自由文化）许可证，并与主程序保持一致或兼容。
    
许可与版权信息：
    * 本程序是自由软件，您可以按照自由软件基金会发布的GNU宽通用公共许可协议（LGPL）许可证
    * 自由地复制、修改或者出售此软件的复制品，GNU LGPL许可证版本号应当是3或者由您选择的任何更新版本；
    * 本程序编写和发布的目的是希望它有用，但并没有任何保证，因为任何用途使用它而造成的任何直接或间接后果，
    * 作者不承担任何责任，详细请查看GNU LGPL许可证。
=============================================================================================
''')
        time.sleep(3)
        continue
    #调用libmaid，将用户输入的句子改成答句
    c = libmaid.main(us,namex,mn)
    #返回女仆的回复和写入时间、对话，变量c必须以组的格式返回。
    for show in c:
        print(mn+'：'+show)
    #保存聊天记录
    t = libmaidtimer.fulltt()
    sav.write(str('\n'+'时间：'+t))
    sav.write(str('\n'+namex+'：'+us))
    for show in c:
        sav.write(str('\n'+mn+'：'+show))
    sav.flush()
    
